package com.dragon.modules.yuegou.client.wechat_mini.service;

import com.dragon.modules.yuegou.client.wechat_mini.request.GetGoodsWareHouseRequest;
import com.dragon.modules.yuegou.client.wechat_mini.request.GetLiveInfoRequest;
import com.dragon.modules.yuegou.client.wechat_mini.request.GetReplayRequest;
import com.dragon.modules.yuegou.client.wechat_mini.request.GoodsAddRequest;
import com.dragon.modules.yuegou.client.wechat_mini.request.GoodsAuditRequest;
import com.dragon.modules.yuegou.client.wechat_mini.request.GoodsDeleteRequest;
import com.dragon.modules.yuegou.client.wechat_mini.request.GoodsResetAuditRequest;
import com.dragon.modules.yuegou.client.wechat_mini.request.GoodsUpdateRequest;
import com.dragon.modules.yuegou.client.wechat_mini.request.RoomAddgoodsRequest;
import com.dragon.modules.yuegou.client.wechat_mini.request.RoomCreateRequest;
import com.dragon.modules.yuegou.client.wechat_mini.response.GetGoodsWareHouseResponse;
import com.dragon.modules.yuegou.client.wechat_mini.response.GetLiveInfoResponse;
import com.dragon.modules.yuegou.client.wechat_mini.response.GetReplayResponse;
import com.dragon.modules.yuegou.client.wechat_mini.response.GoodsAddResponse;
import com.dragon.modules.yuegou.client.wechat_mini.response.GoodsGetApprovedResponse;
import com.dragon.modules.yuegou.client.wechat_mini.response.MediaUploadResponse;
import com.dragon.modules.yuegou.client.wechat_mini.response.RoomCreateResponse;

import java.io.File;

/**
 * 直播服务
 * 
 * @author pengxin
 *
 */
public interface LiveService {

	/**
	 * <p>
	 * 上传多媒体文件
	 * </p>
	 * 
	 * @param type
	 *            图片（image）、语音（voice）、视频（video）和缩略图（thumb）
	 * @param file
	 *            媒体文件
	 * @return mediaId
	 */
	MediaUploadResponse mediaUpload(String type, File file);

	/**
	 * <p>
	 * 上传图片
	 * </p>
	 * 
	 * @param file
	 *            图片文件
	 * @return mediaId
	 */
	MediaUploadResponse mediaUploadImage(File file);

	/**
	 * 创建直播间<br>
	 * 接口说明：<br>
	 * 调用此接口创建直播间，创建成功后将在直播间列表展示<br>
	 * 
	 * @return 直播间ID
	 */
	RoomCreateResponse roomCreate(RoomCreateRequest request);

	/***
	 * 获取直播间列表<br>
	 * 接口说明<br>
	 * 调用此接口获取直播间列表及直播间信息<br>
	 */
	GetLiveInfoResponse getLiveInfo(GetLiveInfoRequest request);

	/***
	 * 获取直播间回放<br>
	 * 接口说明<br>
	 * 调用接口获取已结束直播间的回放源视频（一般在直播结束后10分钟内生成，源视频无评论等内容）<br>
	 */
	GetReplayResponse getReplay(GetReplayRequest request);

	/***
	 * 直播间导入商品<br>
	 * 接口说明<br>
	 * 调用接口往指定直播间导入已入库的商品<br>
	 */
	void roomAddgoods(RoomAddgoodsRequest request);

	/***
	 * 1.商品添加并提审<br>
	 * 接口说明<br>
	 * 调用此接口上传并提审需要直播的商品信息，审核通过后商品录入【小程序直播】商品库<br>
	 * 注意：开发者必须保存【商品ID】与【审核单ID】，如果丢失，则无法调用其他相关接口<br>
	 */
	GoodsAddResponse goodsAdd(GoodsAddRequest request);

	/***
	 * 撤回审核<br>
	 * 接口说明<br>
	 * 调用此接口，可撤回直播商品的提审申请，消耗的提审次数不返还<br>
	 */
	void goodsResetAudit(GoodsResetAuditRequest request);

	/***
	 * 重新提交审核<br>
	 * 接口说明<br>
	 * 调用此接口可以对已撤回提审的商品再次发起提审申请<br>
	 */
	void goodsAudit(GoodsAuditRequest request);

	/***
	 * 删除商品<br>
	 * 接口说明<br>
	 * 调用此接口，可删除【小程序直播】商品库中的商品，删除后直播间上架的该商品也将被同步删除，不可恢复；<br>
	 */
	void goodsDelete(GoodsDeleteRequest request);

	/***
	 * 更新商品<br>
	 * 接口说明<br>
	 * 调用此接口可以更新商品信息，审核通过的商品仅允许更新价格类型与价格，审核中的商品不允许更新，未审核的商品允许更新所有字段，
	 * 只传入需要更新的字段。<br>
	 */
	void goodsUpdate(GoodsUpdateRequest request);

	/***
	 * 获取商品状态<br>
	 * 接口说明<br>
	 * 调用此接口可获取商品的信息与审核状态<br>
	 */
	GetGoodsWareHouseResponse getGoodsWareHouse(GetGoodsWareHouseRequest request);

	/**
	 * 获取商品列表<br>
	 * 接口说明<br>
	 * 调用此接口可获取商品列表<br>
	 * 
	 * @param offset
	 *            分页条数起点
	 * @param limit
	 *            分页大小，默认30，不超过100
	 * @param status
	 *            商品状态，0：未审核。1：审核中，2：审核通过，3：审核驳回
	 * @return
	 */
	GoodsGetApprovedResponse goodsGetApproved(Integer offset, Integer limit, Integer status);

}
